package com.fypg.module.blooddonation.api.client.dal.bloodStation;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;

import java.util.UUID;

/**
 * 访问认证信息
 *
 * @author 盘古
 */
@Data
@Schema(description = "访问认证信息")
public class AccessAuth {

    /**
     * 访问密钥
     * 用于标识调用方身份
     */
    @Schema(description = "访问密钥", example = "XKQhJD6YMmCbd65PFmw")
    private String accessKey;

    /**
     * 签名
     * 用于请求完整性校验（当前使用固定值，建议改为动态生成）
     */
    @Schema(description = "签名", example = "df50cd59065db5ae4b67316485d2443fd65d4e8dab5825ad4ea84f9f1cea3fa1...")
    private String sign;

    /**
     * 随机数
     * 防止重放攻击，每次请求唯一
     */
    @Schema(description = "随机数", example = "NuBqvBb8vjl0DHnzTac")
    private String nonce;

    /**
     * 时间戳
     * 请求发起时间（秒级时间戳）
     */
    @Schema(description = "时间戳", example = "1597463683")
    private String timestamp;

    /**
     * 单参数构造函数
     * 使用默认的签名、随机生成nonce和当前时间戳
     */
    public AccessAuth(String accessKey) {
        this.accessKey = accessKey;
        this.sign = "777bb34296e905fb2b0166f8916cecccfc681fc694580feca58e26344617667f";
        this.nonce = UUID.randomUUID().toString().replace("-", "");
        this.timestamp = String.valueOf(System.currentTimeMillis() / 1000);
    }

    /**
     * 全参数构造函数
     */
    public AccessAuth(String accessKey, String sign, String nonce, String timestamp) {
        this.accessKey = accessKey;
        this.sign = sign;
        this.nonce = nonce;
        this.timestamp = timestamp;
    }

    /**
     * 无参构造函数（用于反序列化）
     */
    public AccessAuth() {
        // 用于JSON反序列化
    }
}
